unit MainFr;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls,
  DataRecord, MainDM;

type

  { TMainFrame }

  /// Frame genérico a ser hedado por outros frames
  TMainFrame = class(TFrame)
  private
    /// Flag que indica a fechamento do MainData
    FCloseData: boolean;
    /// Flag que indica se os dados do frame devem ser retornados
    FReturnData: boolean;
    /// DataSet do Frame
    FMainDataModule: TMainDataModule;
  public
    /// Fecha o DataModule do Frame
    procedure Close();
    /// Abre o DataModule do Frame
    procedure Open();
    /// Obtém um DataRecord com os dados atuais do frame
    function GetDataRecord(): TDataRecord;
    /// Atribui um DataRecord aos dados do frame
    procedure SetDataRecord(Data: TDataRecord); virtual; abstract;
    /// Indica se o frame deve ou não fechar os dados ao ser finalizado
    property CloseData: boolean read FCloseData write FCloseData;
    /// DataModule do Frame
    property MainDataModule: TMainDataModule read FMainDataModule write FMainDataModule;
    /// Indica se o frame deve ou não retornar dados
    property ReturnData: boolean read FReturnData write FReturnData;
  end;

implementation


{ TMainFrame }

procedure TMainFrame.Close;
begin
  // Verifica se o frame possui um DataModule
  if (MainDataModule <> nil) then begin
    // Verifica se o frame deve fechar o DataSet
    if (CloseData) then
      // Fecha o DataSet
      MainDataModule.CloseDataSet();
  end;
  // Oculta o frame
  Parent := nil;
end;

procedure TMainFrame.Open;
begin
  // Verifica se o frame possui um DataModule
  if (MainDataModule <> nil) then
    // Abre o DataSet
    MainDataModule.OpenDataSet();
end;

function TMainFrame.GetDataRecord: TDataRecord;
begin
  // Verifica se o frame possui um DataModule
  if (MainDataModule <> nil) then
    // Retorna o DataRecord do DataModule
    Result := MainDataModule.GetDataRecord()
  else
    Result := nil;
end;

initialization
  {$I mainfr.lrs}

end.
